//
//  IFlyAudioSession.m
//  AIKITDemo
//
//  Created by xyzhang on 2023/3/1.
//

#import "IFlyAudioSession.h"
#import <AVFoundation/AVFoundation.h>
#import "IFlyDebugLog.h"

@implementation IFlyAudioSession
/*
 
 
 先介绍如何通过设置参数取消SDK的默认音频中断处理，并说明各个参数的具体功能和设置方法。
 */
/*
 * 场景一：应用A正在播放音乐，应用B启动语音合成，但不中断应用A播放。
 * 场景1，在应用A正在播放音乐，此时在应用B中启动语音合成或语音识别，可以使应用A暂停播放，当合成或识别结束后应用A自动恢复播放。
 * 场景2，在应用B中正在使用语音合成播放音频，此时应用A启动音乐播放，这时应用B中的合成播放将会暂停，待应用A中播放任务结束后自动恢复合成播放。
 * 场景3，在同一个应用A中先启动音乐播放然后再启动合成或识别时的场景，SDK内部默认的音频服务中断处理可能无法满足大家的需求，此时需要大家先取消SDK的这些默认设置，然后根据实际情况自行设置。
 */
+ (void)initPlayerAudioSession:(BOOL)isMPCenter {
    
    [IFlyDebugLog showLog:@"%s", __func__];
    
    BOOL success;
    NSError *setCategoryError;
    
    AVAudioSession *session = [AVAudioSession sharedInstance];
    
    if ([session.category isEqualToString:AVAudioSessionCategoryPlayAndRecord]) {
        // 播放&录音
        success = [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth error:&setCategoryError];
        if (!success) {
            [IFlyDebugLog showLog:@"%s| AVAudioSessionCategory PlayAndRecord error:@%", __func__, setCategoryError];
        }
    }
    else {
        if (!isMPCenter) {
            //bug fixing:playing, press home button, call anyone, stop calling, cannot resume playing, so use AVAudioSessionCategoryOptionMixWithOthers
            success = [session setCategory:AVAudioSessionCategoryPlayback withOptions:AVAudioSessionCategoryOptionMixWithOthers error:&setCategoryError];
            if (!success) {
                [IFlyDebugLog showLog:@"%s| AVAudioSessionCategory Playback error:@%", __func__, setCategoryError];
            }
        }
        
    }
    
}

/*
 typedef NS_OPTIONS(NSUInteger, AVAudioSessionCategoryOptions) {
     AVAudioSessionCategoryOptionMixWithOthers            = 0x1, //混合
     AVAudioSessionCategoryOptionDuckOthers               = 0x2, //
     AVAudioSessionCategoryOptionAllowBluetooth API_UNAVAILABLE(tvos, watchos, macos) = 0x4,
     AVAudioSessionCategoryOptionDefaultToSpeaker API_UNAVAILABLE(tvos, watchos, macos) = 0x8,
     AVAudioSessionCategoryOptionInterruptSpokenAudioAndMixWithOthers API_AVAILABLE(ios(9.0), watchos(2.0), tvos(9.0)) API_UNAVAILABLE(macos) = 0x11,
     AVAudioSessionCategoryOptionAllowBluetoothA2DP API_AVAILABLE(ios(10.0), watchos(3.0), tvos(10.0)) API_UNAVAILABLE(macos) = 0x20,
     AVAudioSessionCategoryOptionAllowAirPlay API_AVAILABLE(ios(10.0), tvos(10.0)) API_UNAVAILABLE(watchos, macos) = 0x40,
     AVAudioSessionCategoryOptionOverrideMutedMicrophoneInterruption API_AVAILABLE(ios(14.5), watchos(7.3)) API_UNAVAILABLE(tvos, macos) = 0x80,
 };
 */

+ (BOOL)initRecordingAudioSession {
    [IFlyDebugLog showLog:@"%s",__func__];
    
    AVAudioSession * session = [AVAudioSession sharedInstance];
    BOOL success;
    NSError * setCategoryError;
    
    success = [session setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionDefaultToSpeaker|AVAudioSessionCategoryOptionAllowBluetooth error:&setCategoryError];
    if (!success) {
        [IFlyDebugLog showLog:@"%s| AVAudioSessionCategoryOptionAllowBluetooth error:@%",__func__,setCategoryError];
    }
    
    return success;
}

@end
